/**
 * AjLog - The AspectJ based logging facade
 *
 * Copyright (C) 2009 - 2010, Marko Umek. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.ajlog.core.logging;

import org.ajlog.annotations.levels.EAjLogLevel;
import org.ajlog.loglog.ILogger;

/**
 * The interface a logging framework must implement.
 * 
 * @author Marko Umek
 * 
 * 
 */
public interface ILoggingFramework {

    /**
     * Retrieve a logging instance associated with {@code name}
     * 
     * @param name
     *            the name of the logbook or logable class
     */
    Object createLoggingInstance(final String name);

    /**
     * setupLevelMapper is responsible for setting up the AjLog level mapping
     * instance.
     * 
     * @return the {@link IAjLogLevelMapper}
     * 
     * @see EAjLogLevel
     */
    IAjLogLevelMapper setupLevelMapper();

    /**
     * createInternalLoggingInstance creates a internal logging instance
     * {@link ILogger} based on the underlying framework. A default
     * implementation will be provided by {@link AbstractLoggingFramework}.
     * 
     * @param clazz
     *            the class instance
     * @return the internal logger instance.
     */
    ILogger createInternalLoggingInstance(final Class<?> clazz);

}
